package com.future;

/**
 * Description: 605. 种花问题
 *
 * @author weiruibai.vendor
 * Date: 2023/3/22 10:16
 */
public class Solution_605 {

    private static Solution_605 getInstance() {
        return new Solution_605();
    }

    public static void main(String[] args) {
        int[] flowerbed = new int[]{1, 0, 0, 0, 1};
        int n = 2;
        System.out.println(getInstance().canPlaceFlowers(flowerbed, n));
    }

    /**
     * [1,0,0,0,1]
     * 2
     * <p>
     * [1,0,0,0,0,1]
     * 2
     *
     * @param flowerbed
     * @param n
     * @return
     */
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        int N = flowerbed.length;
        boolean preIsFlower = flowerbed[0] == 1 ? true : false;
        if (!preIsFlower && N == 1) {
            return true;
        }
        /**
         * eg:[0,0]
         * 第一个位置满足
         */
        if (!preIsFlower && (N > 1 && flowerbed[1] == 0)) {
            n--;
            preIsFlower = true;
        }
        for (int i = 1; i < N; i++) {
            int flag = flowerbed[i];
            if (flag == 0 && !preIsFlower) {
                /**
                 * 要保证当前位置的前一个是0，当前位置的后一个也是0(除非当前是最后一个位置了)，当前位置才能种花
                 *
                 * 如：
                 * [1,0,0,0,0,1]
                 * 2
                 * 只能在位置2种，
                 * 4位置不行，因为位置5是1
                 *
                 */
                if ((i + 1 < N && flowerbed[i + 1] == 0) || i == N - 1) {
                    n--;
                    flag = 1;
                }
            }
            preIsFlower = (flag == 1);
        }
        return n <= 0;
    }
}
